import functools
from common.logging_use import Logger
from common.custom_exception import TestBaseError
import os
import traceback
import allure
from config import BASE_DIR

class ExceptionHandler:
    # 初始化日志对象
    logger = Logger.init_log_config('exception', os.path.join(BASE_DIR,'log', 'exception.log'))

    @staticmethod
    def handle_exception(func):
        """异常处理装饰器"""
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except TestBaseError as e:
                # 处理自定义业务异常
                error_msg = f"业务异常: {str(e)}\n{traceback.format_exc()}"
                ExceptionHandler.logger.error(error_msg)
                # 在 Allure 报告中添加错误信息
                allure.attach(error_msg, "业务异常", allure.attachment_type.TEXT)
                raise
            except Exception as e:
                # 处理系统异常
                error_msg = f"系统异常: {str(e)}\n{traceback.format_exc()}"
                ExceptionHandler.logger.error(error_msg)
                # 在 Allure 报告中添加错误信息
                allure.attach(error_msg, "系统异常", allure.attachment_type.TEXT)
                raise TestBaseError(f"未预期的错误: {str(e)}")
        return wrapper 